1. Field of the Invention
The present invention relates to computer networks, and deals more particularly with techniques for dynamically deploying application components to various sites within a network based upon characteristics of the components and of the operating environment into which they are to be potentially deployed.
2. Description of the Related Art
Whereas the early Internet served primarily as a distributed file system in which human users could request delivery of already-generated static documents, the trend in recent years has been to add more and more dynamic and personalized aspects into the content that is served to requesters. Typically, this dynamic and personalized content has been generated in the enterprise network. This approach, however, places a heavy demand on the enterprise computing resources. Several techniques have been developed for alleviating the processing burden on back-end servers, including caching of static content (and to a limited extent, caching of content after it has been dynamically generated); workload balancing; and content distribution.
Caching attempts to avoid repeated generation of content by storing content and serving it to subsequent requesters whenever possible. Serving cached content not only reduces the workload ante back-end computing resources, but it also improves response time to the user. Workload balancing improves the performance of a Web site by dynamically adjusting the amount of work sent to each server in a clustered group of servers. Content distribution attempts to pro-actively (statically) publish static content to various locations in the network, for example to cache servers in order to increase the likelihood that requests can be served from cache. Content Distribution Service Providers (“CDSPs”) offer a valuable service by providing access to their broad network infrastructure for caching of static content in close proximity to the end user. This, in turn, enables enterprises to scale their operations in a cost-effective manner. Dynamic content distribution (i.e. dynamically moving generated content closer to users) would yield the same scalability benefits. For some applications (e.g. those which provide session management within their presentation logic, and which only access the back-end business logic in batch mode), it may be possible to (statically) deploy the presentation logic at the edge of the network. In these cases, the content distribution process will typically result in reduced response time as well.
Use of “edge servers” in a network configuration provides increased network efficiency and availability by caching static application components (such as images, forms, etc.) near the edge of the network, where they can be quickly returned to a requester (or quickly retrieved by presentation logic for use in assembling a response to be delivered to a requester). An edge server is a server which is physically located at or near the edge of a network. Edge servers may perform workload balancing, and are sometimes referred to as distributed web caches or surrogates (equivalently, “reverse proxies”) or intermediaries (equivalently, “interception proxies” or “forward proxies”). The IBM WebSphere® Edge Server, for example, performs workload balancing and also functions as a reverse proxy and/or cache server. FIG. 1 provides a diagram of a representative server site 100 (i.e. a collection of server nodes that serve web content associated with a given fully-qualified domain name) within a network, which may (for purposes of example) serve content for a domain name such as “www.ibm.com”. This example server site 100 comprises a cluster 150 of application servers 140 (such as IBM WebSphere application servers); several back-end enterprise data servers 160 (such as IBM OS/390® servers running the DB/2 and/or CICS® products from IBM); several Web servers 130 (such as Apache, Netscape, or Microsoft servers; note that the application server and Web server are often co-resident in a single hardware box); several firewalls 110; and several edge servers or surrogates/caches/load balancers 120. (“WebSphere”, “OS/390”, and “CICS” are registered trademarks of IBM.)
Offloading portions of applications to edge servers is desirable because it offers great potential for improving performance and scalability. The term “application component” or “component” is used hereinafter to refer to the portions of an application which may potentially be offloaded in this manner, and the offloading process is referred to as “edgifying” an application and/or its components. The decision as to whether a component can be offloaded is referred to hereinafter as the “edgeability” or “edgeable” determination.
Existing application offload techniques which are known to the present inventors for determining the edgeability of an application component use a two-stage approach. In the first stage, a programmer familiar with the application component describes that component using a single check-off approach that specifies whether the component is edgeable or non-edgeable. This description is then used by a deplayer, in the second stage, as input to the final deployment (i.e. edgeability) decision. The deplayer may either accept the programmer's edgeability input, or may override the programmer's input, depending (for example) on what the deployer knows about the configuration of the target operating environment. The components are then distributed accordingly.
This prior art approach suffers from several drawbacks. As one example, it does not allow for a good combination of the programmer's knowledge about the application components and the deployer's knowledge about the target operating environment. In addition, this prior art approach may in many cases require changes to the existing programming model for Web-based applications to achieve component distribution. As a result, a distributed application may deviate from commonly accepted programming models such as the “J2EE™” model. That is, an application may have to be rewritten to use special interfaces which are implemented one way for those application components which can be distributed, and a different way for those application components which cannot be distributed. This requires using a new programming library, and decisions about offloading components has to be made in a static, inflexible manner by the programmer as he or she chooses which interface to use. Furthermore, this prior art approach does not allow for the programmer to indicate how potential variations in the target operating environment might alter the input on edgeability, or to account for such changes, and it is not easily modifiable. (“J2EE” is an acronym for “Java™ Platform, Enterprise Edition”. “Java” and “J2EE” are trademarks of Sun Microsystems, Inc.)
Accordingly, what is needed are techniques for edgifying applications which avoid the shortcomings of prior art techniques.